package com.glw.sso.platform.service.common;

import java.util.List;
import java.util.concurrent.Callable;

/**
 *
 * @author glw
 */
public interface ThreadPoolService {

    enum PoolTypeEnum {
        DEFAULT,
        NORMAL,
        REMOTE
    }

    /**
     * 在默认的线程池(32容量)中执行任务
     *
     * @param task
     */
    void execute(Runnable task);

    /**
     * 在指定的线程池中执行任务
     *
     * @param poolType
     * @param task
     */
    void execute(PoolTypeEnum poolType, Runnable task);

    /**
     * 报告指定线程池的状态
     *
     * @param poolType
     */
    void report(PoolTypeEnum poolType);

    /**
     * 在指定的线程池中执行批量任务
     * 多线程并发执行任务, 先阻塞, 任意任务执行成功或全部失败时, 返回结果, 然后继续向下执行
     *
     * @param poolType
     * @param callableList
     * @param <T>
     * @return
     */
    <T> T submitBlockUntilAnySuccess(PoolTypeEnum poolType, List<Callable<T>> callableList);
}
